Socket.IO Nedir?
Socket.IO, web uygulamalarında gerçek zamanlı, çift yönlü ve olay tabanlı iletişim sağlayan güçlü bir JavaScript kütüphanesidir. WebSocket protokolü üzerine inşa edilmiş olup, güvenilir ve geniş tarayıcı desteği sunar.
Socket.IO, WebSocket'in desteklenmediği durumlarda otomatik olarak alternatif iletişim yöntemlerine geçiş yapabilir (Long Polling, vb.).
Temel Özellikler
1. Otomatik Yeniden Bağlanma
const socket = io({
reconnection: true,
reconnectionDelay: 1000,
reconnectionDelayMax: 5000,
reconnectionAttempts: 5
});
2. Paket Tamponu
Bağlantı kopukluğunda veri kaybını önler:
socket.volatile.emit('ping', 'Bu mesaj bağlantı yoksa kaybolabilir');
3. Odalar ve Ad Alanları
// Server tarafı
io.on('connection', (socket) => {
socket.join('oda1');
io.to('oda1').emit('yeni-kullanıcı', 'Kullanıcı odaya katıldı');
});
Kurulum ve Temel Kullanım
Server Tarafı Kurulum
const express = require('express');
const { createServer } = require('http');
const { Server } = require('socket.io');
const app = express();
const httpServer = createServer(app);
const io = new Server(httpServer, {
cors: {
origin: "http://localhost:3000"
}
});
io.on('connection', (socket) => {
console.log('Yeni kullanıcı bağlandı');
});
httpServer.listen(3000);
Client Tarafı Kullanım
import { io } from "socket.io-client";
const socket = io("http://localhost:3000");
socket.on("connect", () => {
console.log('Sunucuya bağlandı');
});
socket.emit('mesaj', 'Merhaba Dünya!');
İleri Düzey Özellikler
1. Middleware Kullanımı
io.use((socket, next) => {
if (socket.handshake.auth.token) {
next();
} else {
next(new Error("Kimlik doğrulama başarısız"));
}
});
Middleware'ler bağlantı kurulmadan önce çalıştırılır. Hata yönetimi önemlidir!
2. Özel Olaylar
// Server
io.on('connection', (socket) => {
socket.on('özel-olay', (data, callback) => {
// İşlem
callback({ status: 'başarılı' });
});
});
// Client
socket.emit('özel-olay', { data: 'test' }, (response) => {
console.log(response.status);
});
3. Odalar ve Yayın
io.on('connection', (socket) => {
// Belirli bir odaya mesaj gönderme
socket.to('oda1').emit('olay', 'mesaj');
// Gönderen hariç herkese yayın
socket.broadcast.emit('olay', 'mesaj');
});
En İyi Pratikler
- Hata Yönetimi
socket.on('connect_error', (error) => {
console.log('Bağlantı hatası:', error);
});
- Bağlantı Durumu Kontrolü
if (socket.connected) {
socket.emit('olay', 'mesaj');
}
Üretim ortamında SSL/TLS kullanmak güvenlik açısından önemlidir.
Örnek Kullanım Senaryoları
- Gerçek zamanlı sohbet uygulamaları
- Çok oyunculu oyunlar
- Canlı analitik panelleri
- İşbirlikçi döküman düzenleme
- IOT cihaz izleme sistemleri
Performans İpuçları
1. Binary Veriler
socket.binary(true).emit('binary-olay', binaryData);
2. Sıkıştırma
const io = new Server(httpServer, {
compression: true
});
Sonuç
Socket.IO, gerçek zamanlı web uygulamaları geliştirmek için güçlü ve güvenilir bir çözümdür. WebSocket protokolünün tüm avantajlarını sunarken, geniş tarayıcı desteği ve otomatik geri dönüş mekanizmaları ile öne çıkar.
Daha detaylı bilgi için resmi Socket.IO dokümantasyonunu inceleyebilirsiniz.